package cn.cs.controller;

import cn.cs.common.Dto;
import cn.cs.common.DtoUtil;
import cn.cs.common.EmptyUtils;
import cn.cs.common.IdWorker;
import cn.cs.pojo.CsOrg;
import cn.cs.service.CsOrgService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


@RestController
@RequestMapping(value = "/org")
public class OrganizationController {

    @Resource
    private CsOrgService csOrgService;


    /**
     * 分页查询组织架构
     * @param pageNumber
     * @param pageSize
     * @return
     * @throws Exception
     * TODO 添加搜索
     */
    @RequestMapping(value = "/csPlatform/getOrgByPage")
    public Dto getOrgByPage(Integer pageNumber, Integer pageSize, String orgName, String orgCode, String orgParentId)throws Exception{
        Map<String, Object> param = new HashMap<>();
        param.put("orgName", orgName);
        param.put("orgCode", orgCode);
        param.put("orgParentId", orgParentId);
        return DtoUtil.returnSuccess("获取成功", csOrgService.queryCsOrgPageByMap(param, pageNumber, pageSize));
    }

    /**
     * 新增/编辑 组织架构
     * @param csOrg
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/updateOrg")
    public Dto updateOrg(@RequestBody CsOrg csOrg)throws Exception{
            String msg = "";
            csOrg.setOrgFid(csOrg.getOrgFid() + "-" + csOrg.getOrgParentId());
            if(EmptyUtils.isEmpty(csOrg.getId())){
                String code = String.format("%03d", csOrgService.getMaxCode("org_code"));
                csOrg.setOrgCode("org_" + code);
                csOrg.setId(IdWorker.getId());
                csOrg.setCreateTime(new Date());
                msg = "新增成功";
                csOrgService.addCsOrg(csOrg);
            }else{
                csOrg.setModifyTime(new Date());
                msg = "修改成功";
                csOrgService.modifyCsOrg(csOrg);
            }
            return DtoUtil.returnSuccess(msg);

    }

    /**
     * 获得组织架构树
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/getOrgTree")
    public Dto getOrgTree()throws Exception{
       return DtoUtil.returnSuccess("操作成功", csOrgService.getOrgTree());
    }

    /**
     * 删除组织架构
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/delOrg")
    public Dto delOrg(String ids)throws Exception{
        int i = 0;
        for(String id:ids.split(",")){
            i += csOrgService.deleteCsOrgById(id);
        }
        if(i>0){
            return DtoUtil.returnSuccess("操作成功", i);
        }else {
            return DtoUtil.returnFail("删除失败，存在二级部门或员工，无法删除", "001");
        }
    }

    /**
     * 改变组织架构有效状态 1有效 0失效
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/updateOrgState")
    public Dto updateOrgState(String id, String state){
        try {
            CsOrg csOrg = new CsOrg();
            csOrg.setId(id);
            csOrg.setOrgValidState(Integer.valueOf(state));
            return DtoUtil.returnSuccess("操作成功", csOrgService.modifyCsOrg(csOrg));
        }catch (Exception e){
            e.printStackTrace();
            return DtoUtil.returnFail("操作失败","001");
        }
    }


}
